package com.xiyuan.smartutils.constants;

import java.nio.ByteBuffer;

/**
 * 常用HTTP常量定义，并继承编码常量和符号常量定义
 *
 * @version v1.0.0 @author lgz 2017-9-21 新建与整理
 */

@SuppressWarnings({"AlibabaAvoidCommentBehindStatement"})
public interface HttpConstants extends CodeConstants, HtmlConstants
{
    
    // 常用的mimeType
    public static final String _TEXT_HTML_                          = "text/html";
    public static final String _TEXT_HTML_UTF_8_                    = "text/html; charset=UTF-8";
    public static final String _TEXT_PLAIN_                         = "text/plain";
    public static final String _TEXT_PLAIN_UTF_8_                   = "text/plain; charset=UTF-8";
    public static final String _TEXT_CDP_                           = "text/x-cross-domain-policy";
    public static final String _APPLICATION_JSON_                   = "application/json";
    public static final String _APPLICATION_JSON_UTF_8_             = "application/json; charset=UTF-8";
    public static final String _APPLICATION_XML_                    = "application/xml";
    public static final String _APPLICATION_XML_UTF_8_              = "application/xml; charset=UTF-8";
    public static final String _APPLICATION_X_WWW_FORM_             = "application/x-www-form-urlencoded";
    public static final String _APPLICATION_X_WWW_FORM_UTF_8_       = "application/x-www-form-urlencoded; charset=UTF-8";
    public static final String _APPLICATION_OCTET_STREAM_           = "application/octet-stream";
    public static final String _MULTIPART_FORM_DATA_                = "multipart/form-data";

    // 常用的协议
    public static final String _HTTP_1_0_                           = "HTTP/1.0";
    public static final String _HTTP_1_1_                           = "HTTP/1.1";
    public static final String _HTTP_1_2_                           = "HTTP/1.2";
    public static final String _HTTP_2_0_                           = "HTTP/2.0";
    public static final String _HTTP_3_0_                           = "HTTP/3.0";
    public static final String _HTTP_                               = "http";
    public static final String _HTTPS_                              = "https";
    public static final String _WS_                                 = "ws";
    public static final String _WSS_                                = "wss";
    public static final String _FTP_                                = "ftp";
    public static final String _SFTP_                               = "sftp";
    public static final String _SOCKS_                              = "socks";
    public static final String _SOCKS5_                             = "socks5";

    // 常用的方法
    public static final String _GET_                                = "GET";// 获取资源
    public static final String _POST_                               = "POST";// 提交资源
    public static final String _HEAD_                               = "HEAD";// 验证资源
    public static final String _PUT_                                = "PUT";// 增加资源，和DELETE成对使用
    public static final String _DELETE_                             = "DELETE";// 删除资源，和PUT成对使用

    // 常用的状态码
    // 0: 表示绝对成功
    // 7x-9x: 表示客户端请求失败

    // 3xx：重定向--要完成请求必须进行更进一步的操作
    // 4xx：客户端错误--请求有语法错误或请求无法实现
    // 5xx：服务器端错误--服务器未能实现合法的请求
    // 6xx: 大于600的状态码由 框架定义
    public static final HttpStatus _0_SUCCESS_                              = HttpStatus._0_SUCCESS_;// 0 Success //绝对成功
    public static final HttpStatus _70_MALFORMED_URL_                       = HttpStatus._70_MALFORMED_URL_;// 70 Malformed URL //非法的URL
    public static final HttpStatus _71_UNKOWN_HOST_                         = HttpStatus._71_UNKOWN_HOST_;// 71 Unkown Host //未知的主机地址
    public static final HttpStatus _72_PARAM_NOT_SATISFIED_                 = HttpStatus._72_PARAM_NOT_SATISFIED_;// 72 Param Not Satisfied //参数未满足
    public static final HttpStatus _73_SOCKET_TIMEOUT_                      = HttpStatus._73_SOCKET_TIMEOUT_;// 73 Socket Timeout //Socket 超时
    public static final HttpStatus _80_SSL_EXCEPTION_                       = HttpStatus._80_SSL_EXCEPTION_;// 80 SSL Exception //SSL 异常
    public static final HttpStatus _81_SSL_HANDSHAKE_EXCEPTION_             = HttpStatus._81_SSL_HANDSHAKE_EXCEPTION_;// 81 SSL Handshake Exception //SSL 握手异常
    public static final HttpStatus _82_SERVER_DATA_EXCEPTION_               = HttpStatus._82_SERVER_DATA_EXCEPTION_;//82 Server Data Exception //服务端数据异常
    public static final HttpStatus _90_SOCKET_EXCEPTION_                    = HttpStatus._90_SOCKET_EXCEPTION_;// 90 Socket Exception //Socket 异常
    public static final HttpStatus _91_CONNECT_EXCEPTION_                   = HttpStatus._91_CONNECT_EXCEPTION_;// 90 Connect Exception //连接异常
    public static final HttpStatus _98_IO_EXCEPTION_                        = HttpStatus._98_IO_EXCEPTION_;// 98 IO Exception //IO异常
    public static final HttpStatus _99_EXCEPTION_                           = HttpStatus._99_EXCEPTION_;// 99 Exception //未知异常

    // 1xx：指示信息--表示请求已接收，继续处理
    /** 100 （部分接受） 客户端应当继续发送请求。这个临时响应是用来通知客户端它的部分请求已经被服务器接收，且仍未被拒绝。 */
    public static final HttpStatus _100_CONTINUE_                          = HttpStatus._100_CONTINUE_;// 100 Continue //客户端应当继续发送请求
    /** Protocols 101 （已了解） 服务器已经理解了客户端的请求，并将通过Upgrade 消息头通知客户端采用不同的协议来完成这个请求。*/
    public static final HttpStatus _101_SWITCHING_PROTOCOLS_               = HttpStatus._101_SWITCHING_PROTOCOLS_;// 101 Switching Protocols //服务器将遵从客户的请求转换到另外一种协议
    /** 102 （已接收） 由WebDAV（RFC 2518）扩展的状态码，代表处理将被继续执行。*/
    public static final HttpStatus _102_PROCESSING_                        = HttpStatus._102_PROCESSING_;// 102 Processing //由WebDAV（RFC 2518）扩展的状态码，代表处理将被继续执行。

    // 2xx：成功--表示请求已被成功接收、理解、接受
    /**200   （成功）  服务器已成功处理了请求。 通常，这表示服务器提供了请求的网页。 */
    public static final HttpStatus _200_OK_                                = HttpStatus._200_OK_;// 200 OK //客户端请求成功
    /**201   （已创建）  请求成功并且服务器创建了新的资源。 */
    public static final HttpStatus _201_CREATED_                           = HttpStatus._201_CREATED_;// 201 Created //服务器已经创建了文档，Location头给出了它的URL。 一般应用于PUT请求时
    /**202   （已接受）  服务器已接受请求，但尚未处理。 */
    public static final HttpStatus _202_ACCEPTED_                          = HttpStatus._202_ACCEPTED_;// 202 Accepted //服务器已接受请求，文档还未处理完，一般应用于PUT请求异步处理
    /**203   （非授权信息）  服务器已成功处理了请求，但返回的信息可能来自另一来源。 */
    public static final HttpStatus _203_NON_AUTHORITATIVE_INFORMATION_     = HttpStatus._203_NON_AUTHORITATIVE_INFORMATION_;// 203 Non-Authoritative Information 文档已经正常地返回，但一些应答头可能不正确，因为使用的是文档的拷贝，一般应用于PUT秒传。
    /**204   （无内容）  服务器成功处理了请求，但没有返回任何内容。 */
    public static final HttpStatus _204_NO_CONTENT_                        = HttpStatus._204_NO_CONTENT_;// 204 No Content //客户端请求成功，无内容，和200内容为空不同的是，200浏览器会跳转到空页面，而204是忽略，即不跳转
    /**205   （重置内容） 服务器成功处理了请求，但没有返回任何内容。*/
    public static final HttpStatus _205_RESET_CONTENT_                     = HttpStatus._205_RESET_CONTENT_;// 205 Reset Content //服务器成功处理了请求,和204不同的是205要求重置内容，如刷新或重置表单等
    /**206   （部分内容）  客户端请求成功，响应部分内容，一般用于断点续传，客户端指定Range,服务端相应Range部分的内容。*/
    public static final HttpStatus _206_PARTIAL_CONTENT_                   = HttpStatus._206_PARTIAL_CONTENT_;// 206 Partial Content //客户端请求成功，响应部分内容，一般用于断点续传，客户端指定Range,服务端相应Range部分的内容
    /**207    由WebDAV(RFC 2518)扩展的状态码，代表之后的消息体将是一个XML消息，并且可能依照之前子请求数量的不同，包含一系列独立的响应代码。*/
    public static final HttpStatus _207_MULTI_STATUS_                      = HttpStatus._207_MULTI_STATUS_;// 207 Multi-Status //由WebDAV(RFC 2518)扩展的状态码，代表之后的消息体将是一个XML消息，并且可能依照之前子请求数量的不同，包含一系列独立的响应代码。

    // 3开头 （请求被重定向）表示要完成请求，需要进一步操作。 通常，这些状态代码用来重定向。
    public static final HttpStatus _300_MULTIPLE_CHOICES_                  = HttpStatus._300_MULTIPLE_CHOICES_;// 300 Multiple Choices 客户请求的文档可以在多个位置找到，这些位置已经在返回的文档内列出。如果服务器要提出优先选择，则应该在Location应答头指明。
    public static final HttpStatus _301_MOVED_PERMANENTLY_                 = HttpStatus._301_MOVED_PERMANENTLY_;// 301 Moved Permanently //所请求的页面已经转移至新的url。
    public static final HttpStatus _302_FOUND_                             = HttpStatus._302_FOUND_;// 302 FOUND //客户端重定向，GET/POST都重定向
    public static final HttpStatus _303_SEE_OTHER_                         = HttpStatus._303_SEE_OTHER_;// 303 See Other //所请求的页面可在别的url下被找到。
    public static final HttpStatus _304_NOT_MODIFIED_                      = HttpStatus._304_NOT_MODIFIED_;// 304 Not Modified //内容未修改
    public static final HttpStatus _305_USE_PROXY_                         = HttpStatus._305_USE_PROXY_;// 305 Use Proxy 客户请求的文档应该通过Location头所指明的代理服务器提取。
    public static final HttpStatus _306_SWITCH_PROXY_                      = HttpStatus._306_SWITCH_PROXY_;// 306 Switch Proxy在最新版的规范中，306状态码已经不再被使用。
    public static final HttpStatus _307_TEMPORARY_REDIRECT_                = HttpStatus._307_TEMPORARY_REDIRECT_;// 307 Temporary Redirect 和302（Found）相同，但只作GET重定向。
    public static final HttpStatus _400_BAD_REQUEST_                       = HttpStatus._400_BAD_REQUEST_;// 400 Bad Request //客户端请求有语法错误，不能被服务器所理解
    public static final HttpStatus _401_UNAUTHORIZED_                      = HttpStatus._401_UNAUTHORIZED_;// 401 Unauthorized //请求未经授权，这个状态代码必须和WWW-Authenticate报头域一起使用
    public static final HttpStatus _402_PAYMENT_REQUIRED_                  = HttpStatus._402_PAYMENT_REQUIRED_;// 402 Payment Required 该状态码是为了将来可能的需求而预留的。
    public static final HttpStatus _403_FORBIDDEN_                         = HttpStatus._403_FORBIDDEN_;// 403 Forbidden //服务器收到请求，但是拒绝提供服务
    public static final HttpStatus _404_NOT_FOUND_                         = HttpStatus._404_NOT_FOUND_;// 404 Not Found //请求资源不存在，eg：输入了错误的URL
    public static final HttpStatus _405_METHOD_NOT_ALLOWD_                 = HttpStatus._405_METHOD_NOT_ALLOWD_;// 405 Method Not Allow //方法不支持
    public static final HttpStatus _406_NOT_ACCEPTABLE_                    = HttpStatus._406_NOT_ACCEPTABLE_;// 406 Not Acceptable //指定的资源已经找到，但它的MIME类型和客户在Accpet头中所指定的不兼容。
    public static final HttpStatus _407_PROXY_AUTHENTICATION_REQUIRED_     = HttpStatus._407_PROXY_AUTHENTICATION_REQUIRED_;// 407 Proxy Authentication Required 类似于401，表示客户必须先经过代理服务器的授权。
    public static final HttpStatus _408_REQUEST_TIMEOUT_                   = HttpStatus._408_REQUEST_TIMEOUT_;// 408 Request Timeout 在服务器许可的等待时间内，客户一直没有发出任何请求。客户可以在以后重复同一请求。
    public static final HttpStatus _409_CONFLICT_                          = HttpStatus._409_CONFLICT_;// 409 Conflict 通常和PUT请求有关。由于请求和资源的当前状态相冲突，因此请求不能成功。
    public static final HttpStatus _410_GONE_                              = HttpStatus._410_GONE_;// 410 Gone 所请求的文档已经不再可用，而且服务器不知道应该重定向到哪一个地址。它和404的不同在于，返回407表示文档永久地离开了指定的位置，而404表示由于未知的原因文档不可用。
    public static final HttpStatus _411_LENGTH_REQUIRED_                   = HttpStatus._411_LENGTH_REQUIRED_;// 411 Length Required //内容长度必须提供
    public static final HttpStatus _412_PRECONDITION_FAILED_               = HttpStatus._412_PRECONDITION_FAILED_;// 412 Precondition Failed 请求头中指定的一些前提条件失败。
    public static final HttpStatus _413_REQUEST_ENTITY_TOO_LARGE_          = HttpStatus._413_REQUEST_ENTITY_TOO_LARGE_;// 413 Request Entity Too Large //请求的实体太大
    public static final HttpStatus _414_REQUEST_URL_TOO_LARGE_             = HttpStatus._414_REQUEST_URL_TOO_LARGE_;// 414 Request Url Too Large //请求URL太大
    public static final HttpStatus _415_UNSUPPORTED_MEDIA_TYPE_            = HttpStatus._415_UNSUPPORTED_MEDIA_TYPE_;// 415 Unsupported Media Type 对于当前请求的方法和所请求的资源，请求中提交的实体并不是服务器中所支持的格式，因此请求被拒绝。
    public static final HttpStatus _416_REQUESTED_RANGE_NOT_SATISFIABLE_   = HttpStatus._416_REQUESTED_RANGE_NOT_SATISFIABLE_;// 416 Requested Range Not Satisfiable 服务器不能满足客户在请求中指定的Range头
    public static final HttpStatus _417_EXPECTATION_FAILED_                = HttpStatus._417_EXPECTATION_FAILED_;// 417 Expectation Failed在请求头 Expect 中指定的预期内容无法被服务器满足。
    public static final HttpStatus _421_TOO_MANY_CONNECTIONS_FROM_IP_      = HttpStatus._421_TOO_MANY_CONNECTIONS_FROM_IP_;// 421 There are too many connections from your internet address 从当前客户端所在的IP地址到服务器的连接数超过了服务器许可的最大范围。
    public static final HttpStatus _422_UNPROCESSABLE_ENTITY_              = HttpStatus._422_UNPROCESSABLE_ENTITY_;// 422 Unprocessable Entity 请求格式正确，但是由于含有语义错误，无法响应。（RFC 4918 WebDAV）
    public static final HttpStatus _423_LOCKED_                            = HttpStatus._423_LOCKED_;// 423 Locked 当前资源被锁定。（RFC 4918 WebDAV）
    public static final HttpStatus _424_FAILED_DEPENDENCY_                 = HttpStatus._424_FAILED_DEPENDENCY_;// 424 Failed Dependency 由于之前的某个请求发生的错误，导致当前请求失败，例如 PROPPATCH。（RFC 4918 WebDAV）
    public static final HttpStatus _425_UNORDERED_COLLECTION_              = HttpStatus._425_UNORDERED_COLLECTION_;// 425 Unordered Collection 在WebDav Advanced Collections 草案中定义，但是未出现在《WebDAV 顺序集协议》（RFC 3658）中。
    public static final HttpStatus _426_UPGRADE_REQUIRED_                  = HttpStatus._426_UPGRADE_REQUIRED_;// 426 Upgrade Required 客户端应当切换到TLS/1.0。（RFC 2817）
    public static final HttpStatus _444_INTERRUPT_                         = HttpStatus._444_INTERRUPT_;// 444 Interrupt //直接中断,NGINX使用到
    public static final HttpStatus _449_RETRY_WITH_                        = HttpStatus._449_RETRY_WITH_;// 449 Retry With //重试,微软使用到
    public static final HttpStatus _500_INTERNAL_SERVER_ERROR_             = HttpStatus._500_INTERNAL_SERVER_ERROR_;// 500 Internal Server Error //服务器发生不可预期的错误
    public static final HttpStatus _501_NOT_IMPLEMENTED_                   = HttpStatus._501_NOT_IMPLEMENTED_;// 501 Not Implemented 服务器不支持实现请求所需要的功能。例如，客户发出了一个服务器不支持的PUT请求。
    public static final HttpStatus _502_BAD_GATEWAY_                       = HttpStatus._502_BAD_GATEWAY_;// 502 Bad Gateway 作为网关或者代理工作的服务器尝试执行请求时，从上游服务器接收到无效的响应。
    public static final HttpStatus _503_SERVER_UNAVAILABLE_                = HttpStatus._503_SERVER_UNAVAILABLE_;// 503 Server Unavailable //服务器当前不能处理客户端的请求，一段时间后可能恢复正常
    public static final HttpStatus _504_GATEWAY_TIMEOUT_                   = HttpStatus._504_GATEWAY_TIMEOUT_;// 504 Gateway Timeout 由作为代理或网关的服务器使用，表示不能及时地从远程服务器获得应答。
    public static final HttpStatus _505_VERSION_NOT_SUPPORTED_             = HttpStatus._505_VERSION_NOT_SUPPORTED_;// 505 HTTP Version Not Supported //服务器不支持版本
    public static final HttpStatus _506_VARIANT_ALSO_NEGOTIATES_           = HttpStatus._506_VARIANT_ALSO_NEGOTIATES_;// 506 Variant Also Negotiates 由《透明内容协商协议》（RFC 2295）扩展，代表服务器存在内部配置错误：被请求的协商变元资源被配置为在透明内容协商中使用自己，因此在一个协商处理中不是一个合适的重点。
    public static final HttpStatus _507_INSUFFICIENT_STORAGE_              = HttpStatus._507_INSUFFICIENT_STORAGE_;// 507 Insufficient Storage 服务器无法存储完成请求所必须的内容。这个状况被认为是临时的。WebDAV (RFC 4918)
    public static final HttpStatus _508_LOOP_DETECTED_                     = HttpStatus._508_LOOP_DETECTED_;// 508 Loop Detected 服务器发现请求中出现一个无穷循环
    public static final HttpStatus _509_BANDWIDTH_LIMIT_EXCEEDED_          = HttpStatus._509_BANDWIDTH_LIMIT_EXCEEDED_;// 509 Bandwidth Limit Exceeded 服务器达到带宽限制。这不是一个官方的状态码，但是仍被广泛使用。
    public static final HttpStatus _510_NOT_EXTENDED_                      = HttpStatus._510_NOT_EXTENDED_;// 510 Not Extended 服务器不支持的扩展。（RFC 2774）
    public static final HttpStatus _600_UNPARSEABLE_RESPONSE_HEADERS_      = HttpStatus._600_UNPARSEABLE_RESPONSE_HEADERS_;// 600 Unparseable Response Headers //无法解析响应头

    public static final HttpStatus _999_ERROR_                             = HttpStatus._999_ERROR_;// 699 Error //通用错误


    // 常用的证书报文域和存储域
    public static final String _SSL_CERT_                               = "SSL_CERT";
    public static final String _SSL_CERTS_KEY_                          = "java.security.cert.X509Certificate";// 把证书放置context，以便业务验证

    // 常用的一般报文域
    public static final String _DATE_                                   = "Date";// 消息产生的日期和时间
    public static final String _AGE_                                    = "Age";// 消息产生的日期和时间
    public static final String _CACHE_CONTROL_                          = "Cache-Control";// 用于指定缓存指令，缓存指令是单向的（响应中出现的缓存指令在请求中未必会出现），且是独立的（一个消息的缓存指令不会影响另一个消息处理的缓存机制），
    public static final String _PRAGMA_                                 = "Pragma";// HTTP1.0使用的类似于Cache-Control报头域为Pragma
    public static final String _P3P_                                    = "P3P";// Platform for Privacy Preferences
    public static final String _CONNECTION_                             = "Connection";// 连接属性keep-alive等

    // 常用的请求报文域
    public static final String _ACCEPT_                                 = "Accept";// Accept请求报头域用于指定客户端接受哪些类型的信息。eg：Accept：image/gif，表明客户端希望接受GIF图象格式的资源；Accept：text/html，表明客户端希望接受html文本。
    public static final String _ACCEPT_CHARSET_                         = "Accept-Charset";// 请求报头域用于指定客户端接受的字符集。eg：Accept-Charset:iso-8859-1,gb2312.如果在请求消息中没有设置这个域，缺省是任何字符集都可以接受。
    public static final String _ACCEPT_ENCODING_                        = "Accept-Encoding";// 请求报头域类似于Accept，但是它是用于指定可接受的内容编码。eg：Accept-Encoding:gzip.deflate.如果请求消息中没有设置这个域服务器假定客户端对各种内容编码都可以接受。
    public static final String _ACCEPT_LANGUAGE_                        = "Accept-Language";// 请求报头域类似于Accept，但是它是用于指定一种自然语言。eg：Accept-Language:zh-cn.如果请求消息中没有设置这个报头域，服务器假定客户端对各种语言都可以接受
    public static final String _AUTHORIZATION_                          = "Authorization";// 主要用于证明客户端有权查看某个资源。当浏览器访问一个页面时，如果收到服务器的响应代码为401（未授权），可以发送一个包含Authorization请求报头域的请求，要求服务器对其进行验证。
    public static final String _HOST_                                   = "Host";// 用于指定被请求资源的Internet主机和端口号，它通常从HTTP URL中提取出来的，eg：我们在浏览器中输入：http://WWW.GONUP.ORG/index.html
    public static final String _USER_AGENT_                             = "User-Agent";// User-Agent请求报头域允许客户端将它的操作系统、浏览器和其它属性告诉服务器。不过，这个报头域不是必需的，如果我们自己编写一个浏览器，不使用User-Agent请求报头域，那么服务器端就无法得知我们的信息了。
    public static final String _IF_MODIFIED_SINCE_                      = "If-Modified-Since";// 修改条件
    public static final String _REFERER_                                = "Referer";// 访问来源
    public static final String _RANGE_                                  = "Range";// 请求范围，当前仅支持bytes

    // 常用的响应报文域
    public static final String _LOCATION_                               = "Location";// 用于重定向接受者到一个新的位置。Location响应报头域常用在更换域名的时候。
    public static final String _SERVER_                                 = "Server";// 包含了服务器用来处理请求的软件信息。与User-Agent请求报头域是相对应的,如：Server：Apache-Coyote/1.1
    public static final String _WWW_AUTHENTICATE_                       = "WWW-Authenticate";// 必须被包含在401（未授权的）响应消息中，客户端收到401响应消息时候，并发送Authorization报头域请求服务器对其进行验证时，服务端响应报头就包含该报头域。eg：WWW-Authenticate:Basic
                                                                                        // realm="Basic Auth Test!" //可以看出服务器对请求资源采用的是基本验证机制。
    public static final String _ALLOW_                                  = "Allow";// 支持的方法 和405一起使用
    public static final String _ACCEPT_RANGES_                          = "Accept-Ranges";// 接受范围
    public static final String _PROXY_CONNECTION_                       = "Proxy-Connection";// 代理连接

    // 常用的实体报文域
    public static final String _CONTENT_DISPOSITION_                    = "Content-Disposition";// 文件类型和文件名
    public static final String _CONTENT_ENCODING_                       = "Content-Encoding";// 它的值指示了已经被应用到实体正文的附加内容的编码，因而要获得Content-Type报头域中所引用的媒体类型，必须采用相应的解码机制。Content-Encoding这样用于记录文档的压缩方法，eg：Content-Encoding：gzip
    public static final String _CONTENT_LANGUAGE_                       = "Content-Language";// 描述了资源所用的自然语言。没有设置该域则认为实体内容将提供给所有的语言阅读者。eg：Content-Language:da
    public static final String _CONTENT_LENGTH_                         = "Content-Length";// 用于指明实体正文的长度，以字节方式存储的十进制数字来表示。
    public static final String _CONTENT_TYPE_                           = "Content-Type";// 指明发送给接收者的实体正文的媒体类型。eg：Content-Type:text/html;charset=ISO-8859-1,Content-Type:text/html;charset=GB2312
    public static final String _CONTENT_LOCATION_                       = "Content-Location";
    public static final String _EXPIRES_                                = "Expires";// 实体报头域给出响应过期的日期和时间。为了让代理服务器或浏览器在一段时间以后更新缓存中(再次访问曾访问过的页面时，直接从缓存中加载，缩短响应时间和降低服务器负载)的页面，我们可以使用Expires实体报头域指定页面过期的时间。eg：Expires：Thu，15 Sep 2006 16:23:12 GMT HTTP1.1的客户端和缓存必须将其他非法的日期格式（包括0）看作已经过期。eg：为了让浏览器不要缓存页面，我们也可以利用Expires实体报头域，设置为0，jsp中程序如下：response.setDateHeader("Expires","0");
    public static final String _LAST_MODIFIED_                          = "Last-Modified";// 用于指示资源的最后修改日期和时间。
    public static final String _ETAG_                                   = "ETag";// 用于指示资源的唯一标识
    public static final String _TRANSFER_ENCODING_                      = "Transfer-Encoding";// 表示输出的内容长度不能确定，如Transfer-Encoding:chunked表示分块传输

    // Cookie响应报文域
    public static final String _COOKIE_                                 = "Cookie";// 版本0适用
    public static final String _COOKIE2_                                = "Cookie2";// 版本1适用
    public static final String _SET_COOKIE_                             = "Set-Cookie";// 版本0适用
    public static final String _SET_COOKIE2_                            = "Set-Cookie2";// 版本1适用
    public static final String _COOKIE_VERSION_                         = "Version";// 版本，当前统一使用Version=1，原版本Version=0
    public static final String _COOKIE_MAX_AGE_                         = "Max-Age";// 版本1适用
    public static final String _COOKIE_DISCARD_                         = "Discard";// 版本1适用
    public static final String _COOKIE_DOMAIN_                          = "Domain";// 版本0适用
    public static final String _COOKIE_PORT_                            = "Port";// 版本1适用
    public static final String _COOKIE_PATH_                            = "Path";// 版本0适用
    public static final String _COOKIE_SECURE_                          = "Secure";// SSL时才传送
    public static final String _COOKIE_HTTP_ONLY                        = "HttpOnly";// IE首先增加，后续的浏览器都支持

    // WebSocket报文域
    public static final String _UPGRADE_                                = "Upgrade";
    public static final String _WEBSOCKET_                              = "WebSocket";
    public static final String _WEBSOCKET_SALT_                         = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
    public static final String _SEC_WEBSOCKET_KEY_                      = "Sec-WebSocket-Key";
    public static final String _SEC_WEBSOCKET_PROTOCOL_                 = "Sec-WebSocket-Protocol";
    public static final String _SEC_WEBSOCKET_VERSION_                  = "Sec-WebSocket-Version";
    public static final String _SEC_WEBSOCKET_ACCEPT_                   = "Sec-WebSocket-Accept";

    // 常用的报文域内容
    public static final String _CLOSE_                                  = "close";
    public static final String _KEEP_ALIVE_                             = "keep-alive";
    public static final String _JSESSIONID_                             = "jsessionid";//默认sessionid 字段名称
    public static final String _BYTES_                                  = "bytes";
    public static final String _ENCODING_GZIP_                          = "gzip";
    public static final String _CHUNKED_                                = "chunked";
    public static final String _NO_CACHE_                               = "no-cache";
    public static final String _NO_CACHE_MUST_RV_NO_STORE_              = "no-cache, must-revalidate, no-store";
    public static final String _MAX_AGE_                                = "max-age";
    public static final String _MAX_AGE_1800_                           = "max-age=1800";
    public static final String _MAX_AGE_1_                              = "max-age=1";
    public static final String _PRIVATE_                                = "private";
    public static final String _PUBLIC_                                 = "public";
    public static final String _P3P_CP_CAO_PSA_OUR_                     = "CP=\"CAO PSA OUR\"";// IFRAME 在IE6以后增加了隐藏cookie不发送的安全机制P3P，本句表示允许第三方cookie的读写IE6//CAO - contact-and-other
    public static final String _XML_HTTP_REQUEST_                       = "XMLHttpRequest";

    // 常用的请求代理头
    public static final String _X_FORWARDED_HOST_                       = "X-Forwarded-Host";
    public static final String _X_FORWARDED_SERVER_                     = "X-Forwarded-Server";
    public static final String _X_FORWARDED_FOR_                        = "X-Forwarded-For";
    public static final String _X_FORWARDED_PROTO_                      = "X-Forwarded-Proto";

    // 常用的定义请求来源和响应方式
    public static final String _X_REQUESTED_WITH_                       = "X-Requested-With";
    public static final String _X_RESPONSED_MODE_                       = "X-Responsed-Mode";


    // 常用的SSL协议|算法和类型
    public static final String SSL_PROTOCOL                             = "TLS"; // 协议
    public static final String SSL_ALGORITHM                            = "SunX509";// 算法
    public static final String SSL_KEYSTORE_TYPE                        = "JKS"; // 类型

    // HTTP服务配置
    public static final String _SERVER_CONTEXT_ = "context";

    // HTTP监听配置
    public static final String _LISTEN_SCHEME_                          = "scheme";
    public static final String _LISTEN_PORT_                            = "port";
    public static final String _LISTEN_IO_                              = "io";
    public static final String _LISTEN_HOST_                            = "host";
    public static final String _LISTEN_SO_REUSEADDR_                    = "soReuseAddr";
    public static final String _LISTEN_SO_ITMEOUT_                      = "soTimeout";
    public static final String _LISTEN_SO_LINGER_S_                     = "soLingerS";
    public static final String _LISTEN_SO_RECV_BUF_                     = "soRecvBuf";
    public static final String _LISTEN_SO_SEND_BUF_                     = "soSendBuf";
    public static final String _LISTEN_SO_IDLE_TIME_                    = "soIdleTime";
    public static final String _LISTEN_MIN_SIZE_                        = "minSize";
    public static final String _LISTEN_MAX_SIZE_                        = "maxSize";
    public static final String _LISTEN_IDLE_TIMEOUT_                    = "idleTimeout";

    // HTTPS证书相关
    public static final String _KEY_STORE_FILE_                         = "keystoreFile";
    public static final String _KEY_STORE_KEY_                          = "keystoreKey";
    public static final String _SSL_PROTOCOL_                           = "sslProtocol";

    public static final String _TRUST_STORE_FILE_                       = "truststoreFile";
    public static final String _TRUST_STORE_KEY_                        = "truststoreKey";
    public static final String _CLIENT_AUTH_                            = "clientAuth";

    // HTTP Context配置
    public static final String _CONTEXT_DOMAIN_                         = "domain";
    public static final String _CONTEXT_PATH_                           = "contextPath";
    public static final String _CONTEXT_RESOURCE_PATH_                  = "resourcePath";
    public static final String _CONTEXT_WELCOME_URL_                    = "welcomeUrl";
    public static final String _CONTEXT_UPLOAD_ROOT_DIR_                = "uploadRootDir";
    public static final String _CONTEXT_CHUNK_SIZE_                     = "chunkSize";
    public static final String _CONTEXT_DEFAULT_ENCODING_               = "defaultEncoding";
    public static final String _CONTEXT_SESSION_TIMEOUT_                = "sessionTimeout";
    public static final String _CONTEXT_SESSION_KEY_                    = "sessionKey";

    public static final String _CONTEXT_EXPIRES_                        = "expires";// 静态资源过期时间


    public static final String _CONTEXT_COOKIE_USE_                     = "isCookieUse";
    public static final String _CONTEXT_COOKIE_DOMAIN_                  = "cookieDomain";
    public static final String _CONTEXT_COOKIE_PORT_                    = "cookiePort";
    public static final String _CONTEXT_COOKIE_PATH_                    = "cookiePath";


    public static final String _CONTEXT_NOT_FOUND_URL_                  = "notFoundUrl";
    public static final String _CONTEXT_FILTER_ = "filter";



    // HTTP协议长度定义
    public static final int _DEF_HEADER_LINE_                           = 128;// 默认请求最大行数
    public static final int _DEF_HEADER_LINE_LEN_                       = 16 * KiB;//默认单行请求头长度
    public static final int _DEF_BODY_SIZE_                             = 8 * MiB;// 默认请求实体大小
    public static final int _DEF_CHUNKED_SIZE_                          = MiB;//默认响应分片大小
    public static final int _DEF_EXPIRES_                               = 1800;//默认过期时间
    public static final String _MAX_HEADER_LINE_                        = "headerLine";//最大请求头行数
    public static final String _MAX_HEADER_LINE_LEN_                    = "headerLineLen";//最大请求头单行字符数
    public static final String _MAX_CLIENT_BODY_SIZE_                   = "bodySize";

    /*************************************************************/
    // 自定义请求头
    /*************************************************************/

    // 上下文环境的常量（系统特有的定义）
    public static final String _CLIENT_TYPE_                            = "clientType";
    public static final String _CLIENT_NAME                             = "smart-utils";

    // 常用的上传组件请求头
    public static final String _X_UPLOAD_FILE_ID_                       = "X-Upload-File-Id";
    public static final String _X_UPLOAD_FILE_DIR_                      = "X-Upload-File-Dir";
    public static final String _X_UPLOAD_FILE_NAME_                     = "X-Upload-File-Name";
    public static final String _X_UPLOAD_FILE_MD5_                      = "X-Upload-File-Md5";
    public static final String _X_UPLOAD_FILE_MD5_TARGET_               = "X-Upload-File-Md5-Target";
    public static final String _X_UPLOAD_FILE_LENGTH_                   = "X-Upload-File-Length";
    public static final String _X_UPLOAD_FILE_URL_                      = "X-Upload-File-Url";
    public static final String _X_UPLOAD_CHUNK_NUM_                     = "X-Upload-Chunk-Num";
    public static final String _X_UPLOAD_CHUNK_SIZE_                    = "X-Upload-Chunk-Size";
    public static final String _X_UPLOAD_CHUNK_NO_                      = "X-Upload-Chunk-No";
    
    
    // 上下文环境的常量（系统特有的定义）
    
    // 常用的ajax调用请求头
    public static final String _X_AJAX_KEY_                             = "X-Ajax-Key";
    public static final String _X_AJAX_CLASS_                           = "X-Ajax-Class";
    public static final String _X_AJAX_METHOD_                          = "X-Ajax-Method";
    public static final String _X_AJAX_SERVICE_                         = "X-Ajax-Service";
    public static final String _X_AJAX_TIMESTAMP_                       = "X-Ajax-Timestamp";
    public static final String _X_AJAX_AUTHORIZATION_                   = "X-Ajax-Authorization";
    
    // 常用的远程方法调用请求头
    public static final String _X_RMI_KEY_                              = "X-RMI-Key";
    public static final String _X_RMI_CLASS_                            = "X-RMI-Class";
    public static final String _X_RMI_METHOD_                           = "X-RMI-Method";
    public static final String _X_RMI_SERVICE_                          = "X-RMI-Service";
    public static final String _X_RMI_TIMESTAMP_                        = "X-RMI-Timestamp";
    public static final String _X_RMI_AUTHORIZATION_                    = "X-RMI-Authorization";
    
    // 上下文环境的常量
    public static final String _CONTEXT_                                = "context";
    public static final String _SESSION_                                = "session";
    public static final String _SESSION_ID_                             = "sessionId";
    public static final String _SESSION_USER_                           = "sessionUser";
    public static final String _SESSION_NAME_                           = "sessionName";
    public static final String _REQUEST_                                = "request";
    public static final String _RESPONSE_                               = "response";

    public static final String _LOG_                                    = "log";
    public static final String _AIO_                                    = "AIO";
    public static final String _BIO_                                    = "BIO";
    public static final String _NIO_                                    = "NIO";

    // 浏览器相关参数
    public static final String _TOKEN_                                  = "_token_";
    public static final String _MSIE_                                   = "msie";
    public static final String _MSTRIDENT_                              = "trident";
    public static final String _FIREFOX_                                = "firefox";
    public static final String _WEBKIT_                                 = "webkit";
    public static final String _CHROME_                                 = "chrome";
    public static final String _SAFARI_                                 = "safari";
    public static final String _MOBILE_                                 = "mobile";
    public static final String _WWW_                                    = "www";
    public static final String _MICROMESSAGER_                          = "micromessenger";


    public static final ByteBuffer _HELLO_N_                            = ByteBuffer.wrap(_CLIENT_NAME.getBytes());

    // 常用的三个文件放到包里
    public static final String _PATH_HTTP_RESOURCE_                     = "/com/xiyuan/http/resources";
    public static final String _PATH_FAVICON_                           = "/favicon.ico";
    public static final String _PATH_CROSSDOMAIN_                       = "/crossdomain.xml";
    public static final String _PATH_MIME_PROPERTIS_                    = "/mime.properties";
    public static final String _PATH_FAVICON_ICO_                       = _PATH_HTTP_RESOURCE_ + _PATH_FAVICON_;
    public static final String _PATH_CROSSDOMAIN_XML_                   = _PATH_HTTP_RESOURCE_ + _PATH_CROSSDOMAIN_;
    public static final String _PATH_MIME_PROPERTIES_                   = _PATH_HTTP_RESOURCE_ + _PATH_MIME_PROPERTIS_;
    
    // 重定向支持的三个常量定义
    public static final String _REDIRECT_HISTORY_                       = "-1"; // 后退，调用window.history.back();
    public static final String _REDIRECT_CLOSE_WINDOW_                  = "closeWindow";// 关闭窗口，调用window.close();
    public static final String _REDIRECT_CLOSE_DIALOG_                  = "closeDialog";// 关闭对话框，调用parent.Z.Dialog.close();

}
